package site.lianwu.mybatis.plus.query.processor;

import site.lianwu.mybatis.plus.query.model.ExecutableQueryStatement;
import site.lianwu.mybatis.plus.query.model.QueryClass;

import java.util.List;

/**
 * 查询类处理器
 *
 * @author LianWu
 */
public interface QueryClassProcessor {

    /**
     * 提取查询类
     *
     * @param clz 条件对象所属类
     * @param includeInheritedFields 是否包含继承字段
     * @return 查询类 {@link QueryClass}
     */
    QueryClass extract(Class<?> clz, boolean includeInheritedFields);

    /**
     * 解析查询类
     *
     * @param queryClass 查询类
     * @param obj 条件对象
     * @return 可执行的查询语句 {@link ExecutableQueryStatement}列表
     */
    List<ExecutableQueryStatement> parse(QueryClass queryClass, Object obj);

}
